package util;

/**
 * @author lyl
 * description:
 */

import org.apache.commons.codec.binary.Base64;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URLDecoder;
import java.net.URLEncoder;

/**
 * 图片转化base64后再UrlEncode结果
 *
 * @author yangmin
 */
public class BaseImg64 {
    /**
     * 将一张本地图片转化成Base64字符串
     *
     * @param imgPath 本地图片地址
     * @return 图片转化base64后再UrlEncode结果
     */
    public static String getImageStrFromPath(String imgPath) {
        InputStream in;
        byte[] data = null;
        // 读取图片字节数组
        try {
            in = new FileInputStream(imgPath);
            data = new byte[in.available()];
            in.read(data);
            in.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        // 对字节数组Base64编码
        Base64 base64 = new Base64();
        // 返回Base64编码过再URLEncode的字节数组字符串
        return URLEncoder.encode(base64.encodeToString(data));
    }

    /**
     * 把base64图片数据转为本地图片
     *
     * @param base64ImgData base64编码的URLEncode加密过的字符串
     * @param filePath      文件保存的全路径，路径+名称
     * @throws IOException
     */
    public static void convertBase64UrlDataToImage(String base64ImgData, String filePath) throws IOException {
        Base64 base64 = new Base64();
        base64ImgData = URLDecoder.decode(base64ImgData);
        byte[] bs = base64.decode(base64ImgData);
        FileOutputStream os = new FileOutputStream(filePath);
        os.write(bs);
        os.close();
    }

    /**
     * 把base64图片数据转为本地图片(测试没有经过URLEncode加密的情况)
     *
     * @param base64ImgData base64编码的字符串
     * @param filePath      文件保存的全路径，路径+名称
     * @throws IOException
     */
    public static void convertBase64DataToImage(String base64ImgData, String filePath) throws IOException {
        Base64 base64 = new Base64();
        //base64ImgData = URLDecoder.decode(base64ImgData);
        byte[] bs = base64.decode(base64ImgData);
        FileOutputStream os = new FileOutputStream(filePath);
        os.write(bs);
        os.close();
    }
}